//你一个按照非递减顺序排列的整数数组 nums，和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
//
//如果数组中不存在目标值 target，返回 [-1, -1]。
//
//你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。
public class SearchRange {
    public int[] searchRange(int[] nums, int target) {
        int a = left(nums,target);
        if(a == -1){
            return new int[]{-1,-1};
        }else{
            return new int[]{a,right(nums,target)};
        }
    }
    public static int left(int[] nums, int target){
        int i = 0; int j = nums.length - 1;
        int candidate = -1;
        while(i<=j){
            int m = (i+j)>>>1;
            if(nums[m] < target){
                i = m + 1;
            }
            else if(target < nums[m]){
                j = m - 1;
            }
            else{
                candidate = m;
                j = m - 1;
            }
        }
        return candidate;
    }

    public static int right(int[] nums, int target){
        int i = 0; int j = nums.length - 1;
        int candidate = -1;
        while(i<=j){
            int m = (i+j)>>>1;
            if(nums[m] < target){
                i = m + 1;
            }
            else if(target < nums[m]){
                j = m - 1;
            }
            else{
                candidate = m;
                i = m + 1;
            }
        }
        return candidate;
    }

}
